package com.app.mbeans.servicio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.faces.model.SelectItemGroup;

import com.app.mbeans.AplicacionBean;
import com.core.app.ExcepcionAplicacion;
import com.core.app.mbeans.MBeanAbstracto;
import com.sun.faces.taglib.jsf_core.SelectItemsTag;



@ManagedBean(name="atenderMesaBean")
@ViewScoped
public class AtenderMesaBean extends MBeanAbstracto implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private List detalleMesa;
	private List<SelectItem> listaPlatillos;
	private Map datosMesa;
	private String platilloSeleccionado;
	private String claveProducto;
	private Integer cantidadProducto;
	
	public Integer getCantidadProducto() {
		return cantidadProducto;
	}

	public void setCantidadProducto(Integer cantidadProducto) {
		this.cantidadProducto = cantidadProducto;
	}

	@PostConstruct
	public void inicializar(){
		ComandaBean comanda = (ComandaBean)getManagedBean("#{comandaBean}", ComandaBean.class);
		datosMesa = duplicarMesa(comanda.getMesaSeleccionada());
		
		if(datosMesa.get("detalleOrden") != null)
		detalleMesa = (List)datosMesa.get("detalleOrden");
		System.out.println("Imprimir mesa:" +datosMesa);
		
		listaPlatillos = crearListaPlatillos();
		System.out.println("listaPlatillos: "+listaPlatillos);
		//platilloSeleccionado = ((SelectItemGroup)listaPlatillos.get(0)).getSelectItems()[0];
	}
	
	public List<String> completeText(String query) {
        List<String> results = new ArrayList<String>();
        String[] platillos = {
        	"Tacos al Pastor", "Taco Arabe", "Taco de Arrachera", "Taco de Salchicha",
        	"Torta Cubana", "Torta de Pastor", "Torta 3 Carnes", "Torta de Pollo",
        	"Hamburguesa Hawaiiana","Hamburguesa Sencilla", "Hamburguesa con Queso", "Hamburguesa de Pollo",
        	"Zarape", "Alambre Sencillo", "Alambre con queso"
	    };
        for(String platillo: platillos) {
            if(platillo.toLowerCase().contains(query.toLowerCase()))
            	results.add(platillo);
        }
         
        return results;
    }
	
	public List<SelectItem> crearListaPlatillos(){
		List<SelectItem> listaPlatillos = new ArrayList<SelectItem>();
		SelectItemGroup itemsTacos = new SelectItemGroup("Tacos");
        itemsTacos.setSelectItems(new SelectItem[] {new SelectItem("Al Pastor", "Al Pastor"), new SelectItem("Arabe", "Arabe"), 
        				new SelectItem("Arrachera", "Arrachera"), new SelectItem("Salchicha", "Salchicha")});
        
        SelectItemGroup itemsTortas = new SelectItemGroup("Tortas");
        itemsTortas.setSelectItems(new SelectItem[] {new SelectItem("De Pastor", "De Pastor"), new SelectItem("Cubana", "Cubana"), 
        				new SelectItem("3 Carnes", "3 Carnes"), new SelectItem("Pollo", "Pollo")});
        
        SelectItemGroup itemsHamburguesas = new SelectItemGroup("Hamburguesas");
        itemsHamburguesas.setSelectItems(new SelectItem[] {new SelectItem("Sencilla", "hsencilla"), new SelectItem("Con queso", "hqueso"), 
        				new SelectItem("Hawaiiana", "Hawaiiana"), new SelectItem("De pollo", "De pollo")});
        
        SelectItemGroup itemsPlatillos = new SelectItemGroup("Platillos");
        itemsPlatillos.setSelectItems(new SelectItem[] {new SelectItem("Alambre Sencillo", "Alambre Sencillo"), new SelectItem("Alambre con queso", "Alambre con queso"), 
        				new SelectItem("Zarape", "Zarape"), new SelectItem("Arrachera con nopales", "Arrachera con nopales")});
        
        listaPlatillos.add(itemsTacos);
        listaPlatillos.add(itemsTortas);
        listaPlatillos.add(itemsHamburguesas);
        listaPlatillos.add(itemsPlatillos);
        
        return listaPlatillos;
        
	}
	
	public Map duplicarMesa(Map mesa){
		Map mapaMesa = new HashMap<String, Object>();
		mapaMesa.put("idMesa",mesa.get("idMesa"));
		mapaMesa.put("numeroMesa", mesa.get("numeroMesa"));
		mapaMesa.put("status", mesa.get("status"));
		mapaMesa.put("numeroStatus", mesa.get("numeroStatus"));
		mapaMesa.put("mesero",mesa.get("mesero"));
		mapaMesa.put("numeroPersonas", mesa.get("numeroPersonas"));
		if(mesa.get("detalleOrden") != null)
		  mapaMesa.put("detalleOrden", duplicarDetalleOrden((List)mesa.get("detalleOrden")));
		
		mapaMesa.put("total", mesa.get("total"));
		
		return mapaMesa;
	}
	
	public List duplicarDetalleOrden(List<Map> listaDetalle){
		List listaNueva = new ArrayList();
		Map mapaDetalleOrden = null;
		for(Map detalle: listaDetalle){
			mapaDetalleOrden = new HashMap<String, Object>();
			mapaDetalleOrden.put("producto", detalle.get("producto"));
			mapaDetalleOrden.put("precio", detalle.get("precio"));
			mapaDetalleOrden.put("cantidad", detalle.get("cantidad"));
			mapaDetalleOrden.put("subTotal", detalle.get("subTotal"));
			listaNueva.add(mapaDetalleOrden);
		}
		
		return listaNueva;
	}
	
	public void actualizarDetalle(ActionEvent evento){
		
	}
	
	public void agregarProducto(ActionEvent evento){
		Map nuevoProducto = new HashMap<String, Object>();
		nuevoProducto.put("producto", platilloSeleccionado);
		nuevoProducto.put("cantidad", cantidadProducto);
		detalleMesa.add(nuevoProducto);
		
		platilloSeleccionado = null;
		cantidadProducto = null;
		claveProducto = null;
	}
	
	public void quitarDetalle(Object parametro){
		System.out.println("Parametro: "+parametro);
		detalleMesa.remove(parametro);
		System.out.println("nuevos detalle: "+detalleMesa);
	}
	
	public void finalizar(ActionEvent evento) throws ExcepcionAplicacion{
		System.out.println("reseteando bean");
		//FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("datosMesa", null);
		//FacesContext.getCurrentInstance().getExternalContext().get
		resetBean(null);
	}

	public List getDetalleMesa() {
		return detalleMesa;
	}

	public void setDetalleMesa(List detalleMesa) {
		this.detalleMesa = detalleMesa;
	}

	public Map getDatosMesa() {
		return datosMesa;
	}

	public void setDatosMesa(Map datosMesa) {
		this.datosMesa = datosMesa;
	}

	public List<SelectItem> getListaPlatillos() {
		return listaPlatillos;
	}

	public void setListaPlatillos(List<SelectItem> listaPlatillos) {
		this.listaPlatillos = listaPlatillos;
	}

	public String getPlatilloSeleccionado() {
		return platilloSeleccionado;
	}

	public void setPlatilloSeleccionado(String platilloSeleccionado) {
		this.platilloSeleccionado = platilloSeleccionado;
	}

	public String getClaveProducto() {
		return claveProducto;
	}

	public void setClaveProducto(String claveProducto) {
		this.claveProducto = claveProducto;
	}

}
